#include <iostream>
#include <string>
#include <climits>
using namespace std;
string minWindow(string s, string t)
{
    int hash1[128] = {0};
    int kind = 0;
    for (auto &c : t)
    {
        if (hash1[c]++ == 0)
        {
            kind++;
        }
    }
    int hash2[128] = {0};
    int minlen = INT_MAX, begin = -1;
    for (int left = 0, right = 0, count = 0; right < s.size(); right++)
    {
        char in = s[right];
        if (++hash2[in] == hash1[in])
        {
            count++;
        }
        while (count == kind)
        {
            if (right - left + 1 < minlen)
            {
                minlen = right - left + 1;
                begin = left;
            }
            char out = s[left++];
            if (hash2[out]-- == hash1[out])
            {
                count--;
            }
        }
    }
    if (begin == -1)
        return "";
    else
        return s.substr(begin, minlen);
}